package com.insight.common.enums;

import lombok.Getter;

/**
 * T017: 导出格式枚举
 * 表示数据字典导出的文件格式
 */
@Getter
public enum ExportFormat {

    /**
     * Markdown 格式
     * 纯文本格式，支持表格和代码块
     * 文件扩展名: .md
     */
    MARKDOWN("Markdown", ".md", "text/markdown", "适合版本控制和文档托管"),

    /**
     * HTML 格式
     * 富文本格式，支持CSS样式和交互
     * 文件扩展名: .html
     */
    HTML("HTML", ".html", "text/html", "适合浏览器查看和打印"),

    /**
     * Excel 格式
     * 电子表格格式，支持多工作表和数据筛选
     * 文件扩展名: .xlsx
     */
    EXCEL("Excel", ".xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "适合数据分析和编辑"),

    /**
     * PDF 格式
     * 便携式文档格式，固定布局
     * 文件扩展名: .pdf
     */
    PDF("PDF", ".pdf", "application/pdf", "适合打印和正式发布");

    /**
     * 格式显示名称
     */
    private final String displayName;

    /**
     * 文件扩展名（包含点号）
     */
    private final String fileExtension;

    /**
     * MIME 类型
     */
    private final String mimeType;

    /**
     * 使用场景描述
     */
    private final String description;

    ExportFormat(String displayName, String fileExtension, String mimeType, String description) {
        this.displayName = displayName;
        this.fileExtension = fileExtension;
        this.mimeType = mimeType;
        this.description = description;
    }

    /**
     * 根据名称获取导出格式
     *
     * @param name 格式名称
     * @return 导出格式枚举
     * @throws IllegalArgumentException 如果名称不匹配任何格式
     */
    public static ExportFormat fromName(String name) {
        for (ExportFormat format : values()) {
            if (format.name().equalsIgnoreCase(name) || format.displayName.equalsIgnoreCase(name)) {
                return format;
            }
        }
        throw new IllegalArgumentException("Unknown export format: " + name);
    }

    /**
     * 根据文件扩展名获取导出格式
     *
     * @param extension 文件扩展名（可以包含或不包含点号）
     * @return 导出格式枚举
     * @throws IllegalArgumentException 如果扩展名不匹配任何格式
     */
    public static ExportFormat fromExtension(String extension) {
        String ext = extension.startsWith(".") ? extension : "." + extension;
        for (ExportFormat format : values()) {
            if (format.fileExtension.equalsIgnoreCase(ext)) {
                return format;
            }
        }
        throw new IllegalArgumentException("Unknown file extension: " + extension);
    }

    /**
     * 生成文件名
     *
     * @param baseName 基础文件名（不含扩展名）
     * @return 完整文件名
     */
    public String generateFileName(String baseName) {
        return baseName + fileExtension;
    }

    /**
     * 判断是否为文本格式
     *
     * @return true 如果是 Markdown 或 HTML
     */
    public boolean isTextFormat() {
        return this == MARKDOWN || this == HTML;
    }

    /**
     * 判断是否为二进制格式
     *
     * @return true 如果是 Excel 或 PDF
     */
    public boolean isBinaryFormat() {
        return this == EXCEL || this == PDF;
    }
}
